Domotique DIY – Partie 6 – Connecter une lampe solaire avec détecteur de mouvement.

schema-electrique-esp

header

Nous allons continuer notre partie de “Domotique DIY” avec la transformation d’une lampe extérieur avec détecteur de mouvement. Le but est bien-sur de la gérer dans notre système domotique.

Présentation.

presentation

Je choisie une lampe extérieur doté d’un chargeur solaire, d’un détecteur de mouvement PIR intégré et d’une photorésistance qui l’allume automatiquement une fois Eclairage inférieur à 10 Lux
Pendant sa phase de fonctionnement (>10 Lux) les LEDs intégrées éclairent à 10 lumens, une fois le mouvement détecté éclairage passe a 60 lm.

etapes

Caractéristiques:

  • Panneau solaire: 0.44W
  • Batterie: 3.7V 600 mAH
  • Led: 0.5 W, 60 lm
  • Angle de détection: 120°, 3m
  • Night sensor: < 10 LUX

Pourquoi ce choix ?…..
Pour des raisons d’une installation simple et surtout sans fil pas de perçage 😉

Modification désirées:

Je veux pouvoir allumer et éteindre ma lampe via ma domotique en fonction de différents scénarios. Pour cela je vais me servir de ESP8266 comme interrupteur WiFi.

Un peu de calcule.

Consommation (mA) des LEDs:

Soit P=UI alors I=P/U  Ouhaaaaaaaaaaaaa…. je suis fort 😉

1
2
3
I(LED) = 0.5W / 3.7V
I(LED) = 0.14A
I(LED) = 140 mA
I(LED) = 0.5W / 3.7V
I(LED) = 0.14A
I(LED) = 140 mA

Estimation théorique de duré de la capacité Q:

Soit Q(mAH) = t(H) * I(mA) alors t = Q/I

1
2
t(batterie) = 600 mAH / 140 mA
t(batterie) = 4.3 Heures
t(batterie) = 600 mAH / 140 mA
t(batterie) = 4.3 Heures

Beuuuu, ce n’est pas géniale ça, la lampe ne fonctionnera pas pendant toute la nuit. En plus si nous branchons un ESP8266 qui fonctionne 24h sur 24 cela va réduire encore plus sa longévité.

Calculons le besoins de notre ESP, qui  consomme de l’énergie pendant toute la duré de la nuit (>10 LUX).
Sachant que un ESP consomme environ 170 mA avec le Wifi activé et que la batterie se recharge seulement pendant environ 12 heures.

1
2
Q = 12 * 170
Q = 2040 mAH
Q = 12 * 170
Q = 2040 mAH

Nous avons besoins alors d’une batterie de min 2040 mAH.

Matérielles:

  • Une Lampe (6€)
  • ESP 8266 (2€)
  • Batterie 3.7V 2450 mAH  (4€)

J’ai remplacé  la batterie d’origine par une Batterie trouvée sur un des nombreux site Chinois. La lampe et l’ESP viennent  naturellement de même site. Coût total de projet est d’environ 12 €.

Démontage

Apres le démontage de la lampe il faut repérer la source d’alimentation et la changer par notre nouvelle batterie

hema-electrique

puis souder deux fils à l’interrupteur existant.

inerupteur

Il nous reste plus qu’a brancher notre ESP selon le chemin suivant:

schema-electrique-esp

ESP8266Lampe
VccVcc
CH_PDVcc
GNDGND
GNDInter -
GPIO2Inter +

lampe-avec-esp8266

Programmation de l’ESP8266:

Le programme n’est pas bien compliqué, L’interrupteur étant un bouton poussoir monostable pour allumer ou éteindre la lampe il faudra juste de mettre le GPIO 2 de notre ESP a 1 attendre quelques millisecondes et le basculer a 0. Il faut également définir une variable globale qui va mémoriser l’état a l’instant t de notre interrupteur.

Le code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
 *  This sketch demonstrates how to set up a simple HTTP-like server.
 *  The server will set a GPIO pin depending on the request
 *    http://server_ip/gpio/0 On or Off,
 *  server_ip is the IP address of the ESP8266 module, will be 
 *  printed to Serial when the module is connected.
 *  Modified by RSyrek for Domotique-Home.fr 
 */
 
#include <ESP8266WiFi.h>
 
const char* ssid = "ssid_wifi";
const char* password = "password_wifi";
 
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
int val = 0;
 
void setup() {
  Serial.begin(115200);
  delay(10);
 
  // prepare GPIO2
  pinMode(2, OUTPUT);
  digitalWrite(2, 0);
  delay(500);
  digitalWrite(2, 1);
  delay(500);
  digitalWrite(2, 0);
 
  
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  // Start the server
  server.begin();
  Serial.println("Server started");
 
  // Print the IP address
  Serial.println(WiFi.localIP());
}
 
void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
  
  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  
  // Match the request
  
  if (req.indexOf("/gpio/0") != -1){
    digitalWrite(2, 1);
    delay(500);
    digitalWrite(2, 0);
      if(val == 0){
        val = 1;
        }
        else{
          val = 0;
          }
    }
  else {
    Serial.println("invalid request");
    client.stop();
    return;
  }
 
  client.flush();
 
  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n";
  s += val;
  s += "</html>\n";
 
  // Send the response to the client
  client.print(s);
  delay(1);
  Serial.println("Client disonnected");
 
  // The client will actually be disconnected 
  // when the function returns and 'client' object is detroyed
}
/*
 *  This sketch demonstrates how to set up a simple HTTP-like server.
 *  The server will set a GPIO pin depending on the request
 *    http://server_ip/gpio/0 On or Off,
 *  server_ip is the IP address of the ESP8266 module, will be 
 *  printed to Serial when the module is connected.
 *  Modified by RSyrek for Domotique-Home.fr 
 */

#include <ESP8266WiFi.h>

const char* ssid = "ssid_wifi";
const char* password = "password_wifi";

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
int val = 0;

void setup() {
  Serial.begin(115200);
  delay(10);

  // prepare GPIO2
  pinMode(2, OUTPUT);
  digitalWrite(2, 0);
  delay(500);
  digitalWrite(2, 1);
  delay(500);
  digitalWrite(2, 0);

  
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
  
  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  
  // Match the request
  
  if (req.indexOf("/gpio/0") != -1){
    digitalWrite(2, 1);
    delay(500);
    digitalWrite(2, 0);
      if(val == 0){
        val = 1;
        }
        else{
          val = 0;
          }
    }
  else {
    Serial.println("invalid request");
    client.stop();
    return;
  }
 
  client.flush();

  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n";
  s += val;
  s += "</html>\n";

  // Send the response to the client
  client.print(s);
  delay(1);
  Serial.println("Client disonnected");

  // The client will actually be disconnected 
  // when the function returns and 'client' object is detroyed
}

Copier le code suivant dans votre ESP mais avant n’oublier pas de renseigner le SSID et le Mot De Passe de votre connexion Wifi. Une fois connecté, lancez la serial console (Arduino ou Putty) et noter bien l’adresse IP attribué a votre module. Maintenant il suffit de taper URL suivante pour allumer ou éteindre votre lampe.

1
http://server_ip/gpio/0
http://server_ip/gpio/0

 

Intégration dans Jeedom

Pour gérer notre lampe avec Jeedom nous allons utiliser le Plugin Script. L’Intégration et très facile, suivez le guide:

  • Plugin > Programmation > Script
  • Ajouter > Nom de l’équipement > D’accord
  • Commandes > Nom > OnOff (par exemple)
  • Commandes > Type script > HTTP
  • Commandes > Type > Action
  • Commandes > Requête > IP_ESP8266/gpio/0

script_jeedom

Intégration dans HC2

Utilisation de votre lampe avec votre HC2 est aussi simple pour cela vous devez:

  • créer un nouveau module virtuel
  • insérer un bouton
  • coller le code LUA suivant
1
2
3
4
5
6
7
--[[
%% properties
%% globals
--]]
 
local http = net.HTTPClient();
http:request("http://IP_ESP8266/gpio/0");
--[[
%% properties
%% globals
--]]

local http = net.HTTPClient();
http:request("http://IP_ESP8266/gpio/0");

Vous pouvez bien sur gérer l’état de la lampe, pour cela il faut juste ajouter une condition en fonction de retour, 0 éteint et 1 allumé.

Si vous avez une trop grande tension à la sortie de votre batterie rajouter un régulateur 3.3V ou un pont diviseur de tension.

Si vous avez des questions ou suggestions n’hésitez pas de les poster je vous répondrais avec plaisir.

 

Articles Similaires

4 Thoughts to “Domotique DIY – Partie 6 – Connecter une lampe solaire avec détecteur de mouvement.”

  1. warde

    Bonjour,

    C’est un peu ce que je cherche à fabriquer.

    Mon but est de renvoyer l’état de la lampe à mon serveur.

    Est-ce que le détecteur PIR fonctionne encore après cette modification ?

    1. R.Syrek

      Oui il fonctionne 😉

  2. Bilil

    Bonjour,

    Merci pour ce tuto c’est ce que je cherche à faire.

    Est ce que vous savez comment réagira la lampe avec le scénario suivant :

    1/ Je souhaite allumer ma lampe de manière constante entre 20:00 et 22:00
    2/ Il y a une détection à 20:30
    3/ La lampe va t’elle s’éteindre à la fin de la détection ou rester allumée jusqu’a ce que je lui dise de s’éteindre ?

    Autre question, est il possible de récupérer le status du détecteur via l’ESP8266 afin d’avoir un scénario plus “complexe” ?

    Ci-dessous le fonctionnement que je souhaiterais avoir :
    1/ Récuper les infos du capteur de mouvement via l’ESP8266
    2/ Pouvoir faire du on/off indépendemment du capteur de mouvement
    3/ Allumer/Eteindre si détection

    Le but serait que ce soit “ma domotique” qui gère entièrement la lampe.
    En gros, je souhaiterais activer la détection suivant des plages horaires.
    Pouvoir à l’occasion forcer l’allumage des lampes.
    Récupérer n’importe quand le status du capteur.

    Merci d’avance,
    Mikael

  3. R.Syrek

    Bonjour,
    ESP fait office d’interrupteur c’est possible avec un scénario approprié géré par votre box domotique.
    pour la récupération d’info sans modifier le montage vous pouvez utiliser une variable dans votre box mais cela ne sera pas fiable à 100%.

Leave a Comment


La période de vérification reCAPTCHA a expiré. Veuillez recharger la page.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.